C++ pour les programmeurs C by Claude Delannoy
Auteur:Claude Delannoy [Delannoy, Claude]
La langue: fra
Format: epub
Tags: Informatique
Éditeur: O'Reilly
Publié: 2007-09-04T08:59:46+00:00
L’héritage simple
274
CHAPITRE 13
On notera bien que si l’opérateur = a été surdéfini sous forme privée dans A, son appel ne
pourra pas se faire pour un objet de type B (en dehors des fonctions membres de B). L’inter-
diction de l’af ectation dans A entraîne donc, d’office, celle de l’affectation dans B.
On retrouve un comportement tout à fait analogue à celui décrit dans le cas du constructeur
de recopie.
8.2 La classe dérivée surdéfinit l'opérateur =
L'affectation de deux objets de type B fera alors nécessairement appel à l'opérateur = défini
dans B. Celui de A ne sera pas appelé, même s'il a été surdéfini. Il faudra donc que l'opéra-
teur = de B prenne en charge tout ce qui concerne l'affectation d'objets de type B, y
compris pour ce qui est des membres hérités de A.
Voici un premier exemple de programme illustrant cela : la classe pointcol dérive de point.
Les deux classes ont surdéfini l'opérateur = :
#include <iostream>
using namespace std ;
class point
{ protected :
int x, y ;
public :
point (int abs=0, int ord=0) { x=abs ; y=ord ;}
point & operator = (point & a)
{ x = a.x ; y = a.y ;
cout << "operateur = de point \n" ;
return * this ;
}
} ;
class pointcol : public point
{ protected :
int coul ;
public :
pointcol (int abs=0, int ord=0, int cl=1) : point (abs, ord) { coul=cl ; }
pointcol & operator = (pointcol & b)
{ coul = b.coul ;
cout << "operateur = de pointcol\n" ;
return * this ;
}
void affiche ()
{ cout << "pointcol : " << x << " " << y << " " << coul << "\n" ;
}
} ;
main()
{ pointcol p(1, 3, 10) , q(4, 9, 20) ;
cout << "p = " ; p.affiche () ;
cout << "q avant = " ; q.affiche () ;
q = p ;
cout << "q apres = " ; q.affiche () ;
}
8 - L’opérateur d’affectation et l’héritage
275
p = pointcol : 1 3 10
q avant = pointcol : 4 9 20
operateur = de pointcol
q apres = pointcol : 4 9 10
Quand la classe de base et la classe dérivée surdéfinissent l'opérateur =
On voit clairement que l'opérateur = défini dans la classe point n'a pas été appelé lors d'une
affectation entre objets de type pointcol.
Le problème est voisin de celui rencontré à propos du constructeur de recopie, avec cette dif-
férence qu'on ne dispose plus ici du mécanisme de transfert d’arguments qui en permettait un
appel (presque) implicite. Si l'on veut pouvoir profiter de l'opérateur = défini dans A, il fau-
dra l'appeler explicitement. Le plus simple pour ce faire est d'utiliser les possibilités de con-
versions de pointeurs examinées au paragraphe précédent.
Voici comment nous pourrions modifier en ce sens l'opérateur = de pointcol :
pointcol & operator = (pointcol & b)
{ point * ad1, * ad2 ;
cout << "opérateur = de pointcol\n" ;
ad1 = this ; // conversion pointeur sur pointcol en pointeur sur point
ad2 = & b ; // idem
* ad1 = * ad2 ; // affectation de la "partie point" de b
coul = b.coul ; // affectation de la partie propre à pointcol
return * this ;
}
Nous convertissons les pointeurs (this et &b) sur des objets de pointcol en des pointeurs sur
des objets de type point.
Télécharger
Ce site ne stocke aucun fichier sur son serveur. Nous ne faisons qu'indexer et lier au contenu fourni par d'autres sites. Veuillez contacter les fournisseurs de contenu pour supprimer le contenu des droits d'auteur, le cas échéant, et nous envoyer un courrier électronique. Nous supprimerons immédiatement les liens ou contenus pertinents.
Exercices en langage C++ by Claude Delannoy(1214)
Mort à crédit by Louis-Ferdinand Céline(1176)
JavaScript pour les Nuls grand format, 2e édition (French Edition) by Eva HOLLAND & Chris MINNICK(1163)
marginal by collectif(1140)
La philosophie du langage by Histoire(1073)
Le Rouge et le Noir by Un livre Un film(1072)
Le Seigneur de Bombay by Vikram Chandra(1066)
Guide pour investir by Robert T. Kiyosaki(1056)
La Gaule by Histoire de France - Livres(1017)
Programmer en langage C by Claude Delannoy(1016)
EXCEL VBA: Guide débutant étape par étape du langage de programmation excel (French Edition) by Jason Jay(1001)
C++ pour les programmeurs C by Claude Delannoy(993)
La pâtisserie by Inconnu(e)(983)
Les grands philosophes by Collectif(961)
Actes by La Bible(955)
La vie de nos morts by Inconnu(e)(939)
La vie secrète des chats by La vie secrète des chats (2014)(907)
Programmation HTML5 avec CSS3 Pour les Nuls (French Edition) by Ed TITTEL & Chris MINNICK(900)
Apprentissage facile Structures de données et algorithmes Java: Apprenez les structures de données et les algorithmes de manière graphique et simple (French Edition) by hu yang(816)